using System;
using bitzhuwei.Compiler;

namespace bitzhuwei.AnsiCFormat {
    partial class CompilerAnsiC {
        /// <summary>
        /// <see cref="LRNode.kind"/> -&gt; <see cref="Action{LRNode, TContext{translation_unit}}"/>
        /// </summary>
        private static readonly Action<LRNode, TContext<translation_unit>>?[]
            @translation_unitExtractorItems = new Action<LRNode, TContext<translation_unit>>[1/*'¥'*/ + 63/*Vn*/];

        /// <summary>
        /// initialize dict for extractor.
        /// </summary>
        private static void InitializeExtractorItems() {
            var extractorItems = @translation_unitExtractorItems;

            #region obsolete
            //extractorDict.Add(st.NotYet,
            //(node, context) => {
            // not needed.
            //});
            //extractorDict.Add(st.Error,
            //(node, context) => {
            // nothing to do.
            //});
            //extractorDict.Add(st.blockComment,
            //(node, context) => {
            // not needed.
            //});
            //extractorDict.Add(st.inlineComment,
            //(node, context) => {
            // not needed.
            //});
            #endregion obsolete

            extractorItems[st.@终/*0*/] = static (node, context) => {
                // [-1] translation_unit' = translation_unit ;
                // dumped by user-defined extractor
                // dumped by ExternalExtractor
                var @final = (Vntranslation_unit)context.rightStack.Pop();
                var left = new translation_unit(@final);
                context.result = left; // final step, no need to push into stack.
            }; // end of extractorItems[st.@终/*0*/] = (node, context) => { ... };
            const int lexiVtCount = 84;
            extractorItems[st.primary_expression枝/*85*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 0: { // [0] primary_expression = 'identifier' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();
                    var left = new Vnprimary_expression.token_(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 1: { // [1] primary_expression = 'constant' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();
                    var left = new Vnprimary_expression.token_(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 2: { // [2] primary_expression = 'string_literal' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();
                    var left = new Vnprimary_expression.token_(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 3: { // [3] primary_expression = '(' expression ')' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Vnexpression)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnprimary_expression.expression_(
                    r2/* reserved word is omissible */
                    , r1
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.primary_expression枝/*85*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.postfix_expression枝/*86*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 4: { // [4] postfix_expression = primary_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vnprimary_expression)context.rightStack.Pop();
                    var left = new Vnpostfix_expression(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 5: { // [5] postfix_expression = postfix_expression '[' expression ']' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Token)context.rightStack.Pop();
                    var r1 = (Vnexpression)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();
                    var r3 = (Vnpostfix_expression)context.rightStack.Pop();
                    var left = r3;
                    left.Add(r2, r1, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 6: { // [6] postfix_expression = postfix_expression '(' ')' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnpostfix_expression)context.rightStack.Pop();
                    var left = r2; Vnargument_expression_list? arg = null;
                    left.Add(
                    r1/* reserved word is omissible */
                    , arg
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 7: { // [7] postfix_expression = postfix_expression '(' argument_expression_list ')' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Vnargument_expression_list)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r3 = (Vnpostfix_expression)context.rightStack.Pop();
                    var left = r3;
                    left.Add(
                    r2/* reserved word is omissible */
                    , r1
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 8: { // [8] postfix_expression = postfix_expression '.' 'identifier' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Token)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnpostfix_expression)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 9: { // [9] postfix_expression = postfix_expression '->' 'identifier' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Token)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnpostfix_expression)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 10: { // [10] postfix_expression = postfix_expression '++' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Vnpostfix_expression)context.rightStack.Pop();
                    var left = r1;
                    left.Add(
                    r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 11: { // [11] postfix_expression = postfix_expression '--' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Vnpostfix_expression)context.rightStack.Pop();
                    var left = r1;
                    left.Add(
                    r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.postfix_expression枝/*86*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.argument_expression_list枝/*87*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 12: { // [12] argument_expression_list = assignment_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vnassignment_expression)context.rightStack.Pop();
                    var left = new Vnargument_expression_list(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 13: { // [13] argument_expression_list = argument_expression_list ',' assignment_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vnassignment_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnargument_expression_list)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.argument_expression_list枝/*87*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.unary_expression枝/*88*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 14: { // [14] unary_expression = postfix_expression ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 1
                    var r0 = (Vnpostfix_expression)context.rightStack.Pop();
                    var left = new Vnunary_expression(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 15: { // [15] unary_expression = '++' unary_expression ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 2
                    var r0 = (Vnunary_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = r0;
                    left.Insert(
                    r1/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 16: { // [16] unary_expression = '--' unary_expression ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 2
                    var r0 = (Vnunary_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = r0;
                    left.Insert(
                    r1/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 17: { // [17] unary_expression = unary_operator cast_expression ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 1
                    var r0 = (Vncast_expression)context.rightStack.Pop();
                    var r1 = (Vnunary_operator)context.rightStack.Pop();
                    var left = new Vnunary_expression(r1, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 18: { // [18] unary_expression = 'sizeof' unary_expression ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 2
                    var r0 = (Vnunary_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = r0;
                    left.Insert(
                    r1/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 19: { // [19] unary_expression = 'sizeof' '(' type_name ')' ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 1
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Vntype_name)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r3 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnunary_expression(
                    r3/* reserved word is omissible */
                    , r2/* reserved word is omissible */
                    , r1
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.unary_expression枝/*88*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.unary_operator枝/*89*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 20: { // [20] unary_operator = '&' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnunary_operator(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 21: { // [21] unary_operator = '*' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnunary_operator(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 22: { // [22] unary_operator = '+' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnunary_operator(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 23: { // [23] unary_operator = '-' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnunary_operator(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 24: { // [24] unary_operator = '~' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnunary_operator(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 25: { // [25] unary_operator = '!' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnunary_operator(r0);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.unary_operator枝/*89*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.cast_expression枝/*90*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 26: { // [26] cast_expression = unary_expression ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 1
                    var r0 = (Vnunary_expression)context.rightStack.Pop();
                    var left = new Vncast_expression(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 27: { // [27] cast_expression = '(' type_name ')' cast_expression ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 2
                    var r0 = (Vncast_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vntype_name)context.rightStack.Pop();
                    var r3 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = r0;
                    left.Insert(
                    r3/* reserved word is omissible */
                    , r2
                    , r1/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.cast_expression枝/*90*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.multiplicative_expression枝/*91*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 28: { // [28] multiplicative_expression = cast_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vncast_expression)context.rightStack.Pop();
                    var left = new Vnmultiplicative_expression(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 29: { // [29] multiplicative_expression = multiplicative_expression '*' cast_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vncast_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnmultiplicative_expression)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 30: { // [30] multiplicative_expression = multiplicative_expression '/' cast_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vncast_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnmultiplicative_expression)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 31: { // [31] multiplicative_expression = multiplicative_expression '%' cast_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vncast_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnmultiplicative_expression)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.multiplicative_expression枝/*91*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.additive_expression枝/*92*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 32: { // [32] additive_expression = multiplicative_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vnmultiplicative_expression)context.rightStack.Pop();
                    var left = new Vnadditive_expression(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 33: { // [33] additive_expression = additive_expression '+' multiplicative_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vnmultiplicative_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnadditive_expression)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 34: { // [34] additive_expression = additive_expression '-' multiplicative_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vnmultiplicative_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnadditive_expression)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.additive_expression枝/*92*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.shift_expression枝/*93*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 35: { // [35] shift_expression = additive_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vnadditive_expression)context.rightStack.Pop();
                    var left = new Vnshift_expression(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 36: { // [36] shift_expression = shift_expression '<<' additive_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vnadditive_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnshift_expression)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 37: { // [37] shift_expression = shift_expression '>>' additive_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vnadditive_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnshift_expression)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.shift_expression枝/*93*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.relational_expression枝/*94*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 38: { // [38] relational_expression = shift_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vnshift_expression)context.rightStack.Pop();
                    var left = new Vnrelational_expression(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 39: { // [39] relational_expression = relational_expression '<' shift_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vnshift_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnrelational_expression)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 40: { // [40] relational_expression = relational_expression '>' shift_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vnshift_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnrelational_expression)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 41: { // [41] relational_expression = relational_expression '<=' shift_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vnshift_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnrelational_expression)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 42: { // [42] relational_expression = relational_expression '>=' shift_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vnshift_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnrelational_expression)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.relational_expression枝/*94*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.equality_expression枝/*95*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 43: { // [43] equality_expression = relational_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vnrelational_expression)context.rightStack.Pop();
                    var left = new Vnequality_expression(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 44: { // [44] equality_expression = equality_expression '==' relational_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vnrelational_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnequality_expression)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 45: { // [45] equality_expression = equality_expression '!=' relational_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vnrelational_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnequality_expression)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.equality_expression枝/*95*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.and_expression枝/*96*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 46: { // [46] and_expression = equality_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vnequality_expression)context.rightStack.Pop();
                    var left = new Vnand_expression(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 47: { // [47] and_expression = and_expression '&' equality_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vnequality_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnand_expression)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.and_expression枝/*96*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.exclusive_or_expression枝/*97*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 48: { // [48] exclusive_or_expression = and_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vnand_expression)context.rightStack.Pop();
                    var left = new Vnexclusive_or_expression(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 49: { // [49] exclusive_or_expression = exclusive_or_expression '^' and_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vnand_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnexclusive_or_expression)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.exclusive_or_expression枝/*97*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.inclusive_or_expression枝/*98*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 50: { // [50] inclusive_or_expression = exclusive_or_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vnexclusive_or_expression)context.rightStack.Pop();
                    var left = new Vninclusive_or_expression(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 51: { // [51] inclusive_or_expression = inclusive_or_expression '|' exclusive_or_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vnexclusive_or_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vninclusive_or_expression)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.inclusive_or_expression枝/*98*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.logical_and_expression枝/*99*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 52: { // [52] logical_and_expression = inclusive_or_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vninclusive_or_expression)context.rightStack.Pop();
                    var left = new Vnlogical_and_expression(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 53: { // [53] logical_and_expression = logical_and_expression '&&' inclusive_or_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vninclusive_or_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnlogical_and_expression)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.logical_and_expression枝/*99*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.logical_or_expression枝/*100*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 54: { // [54] logical_or_expression = logical_and_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vnlogical_and_expression)context.rightStack.Pop();
                    var left = new Vnlogical_or_expression(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 55: { // [55] logical_or_expression = logical_or_expression '||' logical_and_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vnlogical_and_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnlogical_or_expression)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.logical_or_expression枝/*100*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.conditional_expression枝/*101*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 56: { // [56] conditional_expression = logical_or_expression ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 1
                    var r0 = (Vnlogical_or_expression)context.rightStack.Pop();
                    var left = new Vnconditional_expression(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 57: { // [57] conditional_expression = logical_or_expression '?' expression ':' conditional_expression ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 2
                    var r0 = (Vnconditional_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnexpression)context.rightStack.Pop();
                    var r3 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r4 = (Vnlogical_or_expression)context.rightStack.Pop();
                    var left = r0;
                    left.Insert(
                    r4
                    , r3/* reserved word is omissible */
                    , r2
                    , r1/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.conditional_expression枝/*101*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.assignment_expression枝/*102*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 58: { // [58] assignment_expression = conditional_expression ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 1
                    var r0 = (Vnconditional_expression)context.rightStack.Pop();
                    var left = new Vnassignment_expression(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 59: { // [59] assignment_expression = unary_expression assignment_operator assignment_expression ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 2
                    var r0 = (Vnassignment_expression)context.rightStack.Pop();
                    var r1 = (Vnassignment_operator)context.rightStack.Pop();
                    var r2 = (Vnunary_expression)context.rightStack.Pop();
                    var left = r0;
                    left.Insert(r2, r1);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.assignment_expression枝/*102*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.assignment_operator枝/*103*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 60: { // [60] assignment_operator = '=' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnassignment_operator(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 61: { // [61] assignment_operator = '*=' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnassignment_operator(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 62: { // [62] assignment_operator = '/=' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnassignment_operator(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 63: { // [63] assignment_operator = '%=' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnassignment_operator(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 64: { // [64] assignment_operator = '+=' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnassignment_operator(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 65: { // [65] assignment_operator = '-=' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnassignment_operator(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 66: { // [66] assignment_operator = '<<=' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnassignment_operator(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 67: { // [67] assignment_operator = '>>=' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnassignment_operator(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 68: { // [68] assignment_operator = '&=' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnassignment_operator(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 69: { // [69] assignment_operator = '^=' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnassignment_operator(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 70: { // [70] assignment_operator = '|=' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnassignment_operator(r0);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.assignment_operator枝/*103*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.expression枝/*104*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 71: { // [71] expression = assignment_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vnassignment_expression)context.rightStack.Pop();
                    var left = new Vnexpression(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 72: { // [72] expression = expression ',' assignment_expression ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vnassignment_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnexpression)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.expression枝/*104*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.constant_expression枝/*105*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 73: { // [73] constant_expression = conditional_expression ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vnconditional_expression)context.rightStack.Pop();
                    var left = new Vnconstant_expression(r0);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.constant_expression枝/*105*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.declaration枝/*106*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 74: { // [74] declaration = declaration_specifiers ';' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Vndeclaration_specifiers)context.rightStack.Pop();
                    Vninit_declarator_list? null_ = null;
                    var left = new Vndeclaration(r1, null_, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 75: { // [75] declaration = declaration_specifiers init_declarator_list ';' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Vninit_declarator_list)context.rightStack.Pop();
                    var r2 = (Vndeclaration_specifiers)context.rightStack.Pop();
                    var left = new Vndeclaration(
                    r2
                    , r1
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.declaration枝/*106*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.declaration_specifiers枝/*107*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 76: { // [76] declaration_specifiers = storage_class_specifier ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 1
                    var r0 = (Vnstorage_class_specifier)context.rightStack.Pop();
                    var left = new Vndeclaration_specifiers(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 77: { // [77] declaration_specifiers = storage_class_specifier declaration_specifiers ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 2
                    var r0 = (Vndeclaration_specifiers)context.rightStack.Pop();
                    var r1 = (Vnstorage_class_specifier)context.rightStack.Pop();
                    var left = r0;
                    left.Insert(r1);
                    context.rightStack.Push(left);
                }
                break;
                case 78: { // [78] declaration_specifiers = type_specifier ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 1
                    var r0 = (Vntype_specifier)context.rightStack.Pop();
                    var left = new Vndeclaration_specifiers(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 79: { // [79] declaration_specifiers = type_specifier declaration_specifiers ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 2
                    var r0 = (Vndeclaration_specifiers)context.rightStack.Pop();
                    var r1 = (Vntype_specifier)context.rightStack.Pop();
                    var left = r0;
                    left.Insert(r1);
                    context.rightStack.Push(left);
                }
                break;
                case 80: { // [80] declaration_specifiers = type_qualifier ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 1
                    var r0 = (Vntype_qualifier)context.rightStack.Pop();
                    var left = new Vndeclaration_specifiers(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 81: { // [81] declaration_specifiers = type_qualifier declaration_specifiers ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 2
                    var r0 = (Vndeclaration_specifiers)context.rightStack.Pop();
                    var r1 = (Vntype_qualifier)context.rightStack.Pop();
                    var left = r0;
                    left.Insert(r1);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.declaration_specifiers枝/*107*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.init_declarator_list枝/*108*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 82: { // [82] init_declarator_list = init_declarator ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vninit_declarator)context.rightStack.Pop();
                    var left = new Vninit_declarator_list(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 83: { // [83] init_declarator_list = init_declarator_list ',' init_declarator ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vninit_declarator)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vninit_declarator_list)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.init_declarator_list枝/*108*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.init_declarator枝/*109*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 84: { // [84] init_declarator = declarator ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vndeclarator)context.rightStack.Pop();
                    var left = new Vninit_declarator(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 85: { // [85] init_declarator = declarator '=' initializer ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vninitializer)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vndeclarator)context.rightStack.Pop();
                    var left = new Vninit_declarator(
                    r2
                    , r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.init_declarator枝/*109*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.storage_class_specifier枝/*110*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 86: { // [86] storage_class_specifier = 'typedef' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnstorage_class_specifier(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 87: { // [87] storage_class_specifier = 'extern' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnstorage_class_specifier(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 88: { // [88] storage_class_specifier = 'static' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnstorage_class_specifier(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 89: { // [89] storage_class_specifier = 'auto' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnstorage_class_specifier(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 90: { // [90] storage_class_specifier = 'register' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnstorage_class_specifier(r0);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.storage_class_specifier枝/*110*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.type_specifier枝/*111*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 91: { // [91] type_specifier = 'void' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vntype_specifier.token_(
                    r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 92: { // [92] type_specifier = 'char' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vntype_specifier.token_(
                    r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 93: { // [93] type_specifier = 'short' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vntype_specifier.token_(
                    r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 94: { // [94] type_specifier = 'int' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vntype_specifier.token_(
                    r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 95: { // [95] type_specifier = 'long' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vntype_specifier.token_(
                    r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 96: { // [96] type_specifier = 'float' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vntype_specifier.token_(
                    r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 97: { // [97] type_specifier = 'double' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vntype_specifier.token_(
                    r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 98: { // [98] type_specifier = 'signed' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vntype_specifier.token_(
                    r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 99: { // [99] type_specifier = 'unsigned' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vntype_specifier.token_(
                    r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 100: { // [100] type_specifier = struct_or_union_specifier ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vnstruct_or_union_specifier)context.rightStack.Pop();
                    var left = new Vntype_specifier.struct_union_(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 101: { // [101] type_specifier = enum_specifier ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vnenum_specifier)context.rightStack.Pop();
                    var left = new Vntype_specifier.enum_(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 102: { // [102] type_specifier = 'type_name' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();
                    var left = new Vntype_specifier.token_(r0);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.type_specifier枝/*111*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.struct_or_union_specifier枝/*112*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 103: { // [103] struct_or_union_specifier = struct_or_union 'identifier' '{' struct_declaration_list '}' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();
                    var r1 = (Vnstruct_declaration_list)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();
                    var r3 = (Token)context.rightStack.Pop();
                    var r4 = (Vnstruct_or_union)context.rightStack.Pop();
                    var left = new Vnstruct_or_union_specifier(r4, r3, r2, r1, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 104: { // [104] struct_or_union_specifier = struct_or_union '{' struct_declaration_list '}' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();
                    var r1 = (Vnstruct_declaration_list)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();
                    var r3 = (Vnstruct_or_union)context.rightStack.Pop();
                    var left = new Vnstruct_or_union_specifier(r3, null, r2, r1, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 105: { // [105] struct_or_union_specifier = struct_or_union 'identifier' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();
                    var r1 = (Vnstruct_or_union)context.rightStack.Pop();
                    var left = new Vnstruct_or_union_specifier(r1, r0, null, null, null);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.struct_or_union_specifier枝/*112*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.struct_or_union枝/*113*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 106: { // [106] struct_or_union = 'struct' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnstruct_or_union(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 107: { // [107] struct_or_union = 'union' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnstruct_or_union(r0);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.struct_or_union枝/*113*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.struct_declaration_list枝/*114*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 108: { // [108] struct_declaration_list = struct_declaration ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vnstruct_declaration)context.rightStack.Pop();
                    var left = new Vnstruct_declaration_list(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 109: { // [109] struct_declaration_list = struct_declaration_list struct_declaration ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vnstruct_declaration)context.rightStack.Pop();
                    var r1 = (Vnstruct_declaration_list)context.rightStack.Pop();
                    var left = r1;
                    left.Add(r0);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.struct_declaration_list枝/*114*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.struct_declaration枝/*115*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 110: { // [110] struct_declaration = specifier_qualifier_list struct_declarator_list ';' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Vnstruct_declarator_list)context.rightStack.Pop();
                    var r2 = (Vnspecifier_qualifier_list)context.rightStack.Pop();
                    var left = new Vnstruct_declaration(
                    r2
                    , r1
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.struct_declaration枝/*115*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.specifier_qualifier_list枝/*116*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 111: { // [111] specifier_qualifier_list = type_specifier specifier_qualifier_list ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 2
                    var r0 = (Vnspecifier_qualifier_list)context.rightStack.Pop();
                    var r1 = (Vntype_specifier)context.rightStack.Pop();
                    var left = r0;
                    left.Insert(r1);
                    context.rightStack.Push(left);
                }
                break;
                case 112: { // [112] specifier_qualifier_list = type_specifier ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 1
                    var r0 = (Vntype_specifier)context.rightStack.Pop();
                    var left = new Vnspecifier_qualifier_list(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 113: { // [113] specifier_qualifier_list = type_qualifier specifier_qualifier_list ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 2
                    var r0 = (Vnspecifier_qualifier_list)context.rightStack.Pop();
                    var r1 = (Vntype_qualifier)context.rightStack.Pop();
                    var left = r0;
                    left.Insert(r1);
                    context.rightStack.Push(left);
                }
                break;
                case 114: { // [114] specifier_qualifier_list = type_qualifier ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 1
                    var r0 = (Vntype_qualifier)context.rightStack.Pop();
                    var left = new Vnspecifier_qualifier_list(r0);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.specifier_qualifier_list枝/*116*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.struct_declarator_list枝/*117*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 115: { // [115] struct_declarator_list = struct_declarator ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vnstruct_declarator)context.rightStack.Pop();
                    var left = new Vnstruct_declarator_list(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 116: { // [116] struct_declarator_list = struct_declarator_list ',' struct_declarator ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vnstruct_declarator)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnstruct_declarator_list)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.struct_declarator_list枝/*117*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.struct_declarator枝/*118*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 117: { // [117] struct_declarator = declarator ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vndeclarator)context.rightStack.Pop();
                    var left = new Vnstruct_declarator(r0, null, null);
                    context.rightStack.Push(left);
                }
                break;
                case 118: { // [118] struct_declarator = ':' constant_expression ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vnconstant_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnstruct_declarator(null, r1, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 119: { // [119] struct_declarator = declarator ':' constant_expression ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vnconstant_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vndeclarator)context.rightStack.Pop();
                    var left = new Vnstruct_declarator(
                    r2
                    , r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.struct_declarator枝/*118*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.enum_specifier枝/*119*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 120: { // [120] enum_specifier = 'enum' '{' enumerator_list '}' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();
                    var r1 = (Vnenumerator_list)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();
                    var r3 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnenum_specifier(r3, null, r2, r1, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 121: { // [121] enum_specifier = 'enum' 'identifier' '{' enumerator_list '}' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();
                    var r1 = (Vnenumerator_list)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();
                    var r3 = (Token)context.rightStack.Pop();
                    var r4 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnenum_specifier(
                    r4/* reserved word is omissible */
                    , r3
                    , r2
                    , r1
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 122: { // [122] enum_specifier = 'enum' 'identifier' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnenum_specifier(r1, r0, null, null, null);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.enum_specifier枝/*119*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.enumerator_list枝/*120*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 123: { // [123] enumerator_list = enumerator ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vnenumerator)context.rightStack.Pop();
                    var left = new Vnenumerator_list(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 124: { // [124] enumerator_list = enumerator_list ',' enumerator ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vnenumerator)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnenumerator_list)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.enumerator_list枝/*120*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.enumerator枝/*121*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 125: { // [125] enumerator = 'identifier' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();
                    var left = new Vnenumerator(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 126: { // [126] enumerator = 'identifier' '=' constant_expression ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vnconstant_expression)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Token)context.rightStack.Pop();
                    var left = new Vnenumerator(
                    r2
                    , r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.enumerator枝/*121*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.type_qualifier枝/*122*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 127: { // [127] type_qualifier = 'const' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vntype_qualifier(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 128: { // [128] type_qualifier = 'volatile' ;
                    // dumped by user-defined extractor
                    // dumped by ConstsExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vntype_qualifier(r0);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.type_qualifier枝/*122*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.declarator枝/*123*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 129: { // [129] declarator = pointer direct_declarator ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vndirect_declarator)context.rightStack.Pop();
                    var r1 = (Vnpointer)context.rightStack.Pop();
                    var left = new Vndeclarator(r1, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 130: { // [130] declarator = direct_declarator ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vndirect_declarator)context.rightStack.Pop();
                    var left = new Vndeclarator(null, r0);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.declarator枝/*123*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.direct_declarator枝/*124*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 131: { // [131] direct_declarator = 'identifier' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Token)context.rightStack.Pop();
                    var left = new Vndirect_declarator(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 132: { // [132] direct_declarator = '(' declarator ')' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Vndeclarator)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vndirect_declarator(
                    r2/* reserved word is omissible */
                    , r1
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 133: { // [133] direct_declarator = direct_declarator '[' constant_expression ']' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Token)context.rightStack.Pop();
                    var r1 = (Vnconstant_expression)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();
                    var r3 = (Vndirect_declarator)context.rightStack.Pop();
                    var left = r3;
                    left.Add(r2, r1, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 134: { // [134] direct_declarator = direct_declarator '[' ']' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Token)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();
                    var r2 = (Vndirect_declarator)context.rightStack.Pop();
                    var left = r2;
                    left.Add(r1, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 135: { // [135] direct_declarator = direct_declarator '(' parameter_type_list ')' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Vnparameter_type_list)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r3 = (Vndirect_declarator)context.rightStack.Pop();
                    var left = r3;
                    left.Add(
                    r2/* reserved word is omissible */
                    , r1
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 136: { // [136] direct_declarator = direct_declarator '(' identifier_list ')' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Vnidentifier_list)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r3 = (Vndirect_declarator)context.rightStack.Pop();
                    var left = r3;
                    left.Add(
                    r2/* reserved word is omissible */
                    , r1
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 137: { // [137] direct_declarator = direct_declarator '(' ')' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vndirect_declarator)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.direct_declarator枝/*124*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.pointer枝/*125*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 138: { // [138] pointer = '*' ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 1
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnpointer(r0, null);
                    context.rightStack.Push(left);
                }
                break;
                case 139: { // [139] pointer = '*' type_qualifier_list ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 1
                    var r0 = (Vntype_qualifier_list)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnpointer(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 140: { // [140] pointer = '*' pointer ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 2
                    var r0 = (Vnpointer)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = r0;
                    left.Insert(r1, null);
                    context.rightStack.Push(left);
                }
                break;
                case 141: { // [141] pointer = '*' type_qualifier_list pointer ;
                    // dumped by user-defined extractor
                    // dumped by ReversedListExtractor 2
                    var r0 = (Vnpointer)context.rightStack.Pop();
                    var r1 = (Vntype_qualifier_list)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = r0;
                    left.Insert(
                    r2/* reserved word is omissible */
                    , r1
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.pointer枝/*125*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.type_qualifier_list枝/*126*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 142: { // [142] type_qualifier_list = type_qualifier ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vntype_qualifier)context.rightStack.Pop();
                    var left = new Vntype_qualifier_list(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 143: { // [143] type_qualifier_list = type_qualifier_list type_qualifier ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vntype_qualifier)context.rightStack.Pop();
                    var r1 = (Vntype_qualifier_list)context.rightStack.Pop();
                    var left = r1;
                    left.Add(r0);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.type_qualifier_list枝/*126*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.parameter_type_list枝/*127*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 144: { // [144] parameter_type_list = parameter_list ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vnparameter_list)context.rightStack.Pop();
                    var left = new Vnparameter_type_list(r0, null, null);
                    context.rightStack.Push(left);
                }
                break;
                case 145: { // [145] parameter_type_list = parameter_list ',' '...' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnparameter_list)context.rightStack.Pop();
                    var left = new Vnparameter_type_list(
                    r2
                    , r1/* reserved word is omissible */
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.parameter_type_list枝/*127*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.parameter_list枝/*128*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 146: { // [146] parameter_list = parameter_declaration ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vnparameter_declaration)context.rightStack.Pop();
                    var left = new Vnparameter_list(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 147: { // [147] parameter_list = parameter_list ',' parameter_declaration ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vnparameter_declaration)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnparameter_list)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.parameter_list枝/*128*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.parameter_declaration枝/*129*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 148: { // [148] parameter_declaration = declaration_specifiers declarator ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vndeclarator)context.rightStack.Pop();
                    var r1 = (Vndeclaration_specifiers)context.rightStack.Pop();
                    var left = new Vnparameter_declaration(r1, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 149: { // [149] parameter_declaration = declaration_specifiers abstract_declarator ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vnabstract_declarator)context.rightStack.Pop();
                    var r1 = (Vndeclaration_specifiers)context.rightStack.Pop();
                    var left = new Vnparameter_declaration(r1, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 150: { // [150] parameter_declaration = declaration_specifiers ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vndeclaration_specifiers)context.rightStack.Pop();
                    var left = new Vnparameter_declaration(r0);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.parameter_declaration枝/*129*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.identifier_list枝/*130*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 151: { // [151] identifier_list = 'identifier' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Token)context.rightStack.Pop();
                    var left = new Vnidentifier_list(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 152: { // [152] identifier_list = identifier_list ',' 'identifier' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Token)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnidentifier_list)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.identifier_list枝/*130*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.type_name枝/*131*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 153: { // [153] type_name = specifier_qualifier_list ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vnspecifier_qualifier_list)context.rightStack.Pop();
                    var left = new Vntype_name(r0, null);
                    context.rightStack.Push(left);
                }
                break;
                case 154: { // [154] type_name = specifier_qualifier_list abstract_declarator ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vnabstract_declarator)context.rightStack.Pop();
                    var r1 = (Vnspecifier_qualifier_list)context.rightStack.Pop();
                    var left = new Vntype_name(r1, r0);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.type_name枝/*131*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.abstract_declarator枝/*132*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 155: { // [155] abstract_declarator = pointer ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vnpointer)context.rightStack.Pop();
                    var left = new Vnabstract_declarator(r0, null);
                    context.rightStack.Push(left);
                }
                break;
                case 156: { // [156] abstract_declarator = direct_abstract_declarator ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vndirect_abstract_declarator)context.rightStack.Pop();
                    var left = new Vnabstract_declarator(null, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 157: { // [157] abstract_declarator = pointer direct_abstract_declarator ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vndirect_abstract_declarator)context.rightStack.Pop();
                    var r1 = (Vnpointer)context.rightStack.Pop();
                    var left = new Vnabstract_declarator(r1, r0);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.abstract_declarator枝/*132*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.direct_abstract_declarator枝/*133*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 158: { // [158] direct_abstract_declarator = '(' abstract_declarator ')' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Vnabstract_declarator)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vndirect_abstract_declarator(
                    r2/* reserved word is omissible */
                    , r1
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 159: { // [159] direct_abstract_declarator = '[' ']' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Token)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();
                    Vnconstant_expression? const_ = null;
                    var left = new Vndirect_abstract_declarator(r1, const_, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 160: { // [160] direct_abstract_declarator = '[' constant_expression ']' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Token)context.rightStack.Pop();
                    var r1 = (Vnconstant_expression)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();
                    var left = new Vndirect_abstract_declarator(r2, r1, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 161: { // [161] direct_abstract_declarator = direct_abstract_declarator '[' ']' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Token)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();
                    var r2 = (Vndirect_abstract_declarator)context.rightStack.Pop();
                    var left = r2; Vnconstant_expression? const_ = null;
                    left.Add(r1, const_, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 162: { // [162] direct_abstract_declarator = direct_abstract_declarator '[' constant_expression ']' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Token)context.rightStack.Pop();
                    var r1 = (Vnconstant_expression)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();
                    var r3 = (Vndirect_abstract_declarator)context.rightStack.Pop();
                    var left = r3;
                    left.Add(r2, r1, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 163: { // [163] direct_abstract_declarator = '(' ')' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    Vnparameter_type_list? params_ = null;
                    var left = new Vndirect_abstract_declarator(
                    r1/* reserved word is omissible */
                    , params_
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 164: { // [164] direct_abstract_declarator = '(' parameter_type_list ')' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Vnparameter_type_list)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vndirect_abstract_declarator(
                    r2/* reserved word is omissible */
                    , r1
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 165: { // [165] direct_abstract_declarator = direct_abstract_declarator '(' ')' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vndirect_abstract_declarator)context.rightStack.Pop();
                    var left = r2; Vnparameter_type_list? params_ = null;
                    left.Add(
                    r1/* reserved word is omissible */
                    , params_
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 166: { // [166] direct_abstract_declarator = direct_abstract_declarator '(' parameter_type_list ')' ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Vnparameter_type_list)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r3 = (Vndirect_abstract_declarator)context.rightStack.Pop();
                    var left = r3;
                    left.Add(
                    r2/* reserved word is omissible */
                    , r1
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.direct_abstract_declarator枝/*133*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.initializer枝/*134*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 167: { // [167] initializer = assignment_expression ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vnassignment_expression)context.rightStack.Pop();
                    var left = new Vninitializer.assign_(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 168: { // [168] initializer = '{' initializer_list '}' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();
                    var r1 = (Vninitializer_list)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();
                    var left = new Vninitializer.list_(r2, r1, null, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 169: { // [169] initializer = '{' initializer_list ',' '}' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vninitializer_list)context.rightStack.Pop();
                    var r3 = (Token)context.rightStack.Pop();
                    var left = new Vninitializer.list_(
                    r3
                    , r2
                    , r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.initializer枝/*134*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.initializer_list枝/*135*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 170: { // [170] initializer_list = initializer ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vninitializer)context.rightStack.Pop();
                    var left = new Vninitializer_list(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 171: { // [171] initializer_list = initializer_list ',' initializer ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vninitializer)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vninitializer_list)context.rightStack.Pop();
                    var left = r2;
                    left.Add(
                    r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.initializer_list枝/*135*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.statement枝/*136*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 172: { // [172] statement = labeled_statement ;
                    // dumped by user-defined extractor
                    // dumped by InheritExtractor
                    // class Vnlabeled_statement = Vnstatement
                    var r0 = (Vnlabeled_statement)context.rightStack.Pop();
                    var left = r0;
                    context.rightStack.Push(left);
                }
                break;
                case 173: { // [173] statement = compound_statement ;
                    // dumped by user-defined extractor
                    // dumped by InheritExtractor
                    // class Vncompound_statement = Vnstatement
                    var r0 = (Vncompound_statement)context.rightStack.Pop();
                    var left = r0;
                    context.rightStack.Push(left);
                }
                break;
                case 174: { // [174] statement = expression_statement ;
                    // dumped by user-defined extractor
                    // dumped by InheritExtractor
                    // class Vnexpression_statement = Vnstatement
                    var r0 = (Vnexpression_statement)context.rightStack.Pop();
                    var left = r0;
                    context.rightStack.Push(left);
                }
                break;
                case 175: { // [175] statement = selection_statement ;
                    // dumped by user-defined extractor
                    // dumped by InheritExtractor
                    // class Vnselection_statement = Vnstatement
                    var r0 = (Vnselection_statement)context.rightStack.Pop();
                    var left = r0;
                    context.rightStack.Push(left);
                }
                break;
                case 176: { // [176] statement = iteration_statement ;
                    // dumped by user-defined extractor
                    // dumped by InheritExtractor
                    // class Vniteration_statement = Vnstatement
                    var r0 = (Vniteration_statement)context.rightStack.Pop();
                    var left = r0;
                    context.rightStack.Push(left);
                }
                break;
                case 177: { // [177] statement = jump_statement ;
                    // dumped by user-defined extractor
                    // dumped by InheritExtractor
                    // class Vnjump_statement = Vnstatement
                    var r0 = (Vnjump_statement)context.rightStack.Pop();
                    var left = r0;
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.statement枝/*136*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.labeled_statement枝/*137*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 178: { // [178] labeled_statement = 'identifier' ':' statement ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vnstatement)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Token)context.rightStack.Pop();
                    var left = new Vnlabeled_statement.id_(
                    r2
                    , r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 179: { // [179] labeled_statement = 'case' constant_expression ':' statement ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vnstatement)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnconstant_expression)context.rightStack.Pop();
                    var r3 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnlabeled_statement.case_(
                    r3/* reserved word is omissible */
                    , r2
                    , r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 180: { // [180] labeled_statement = 'default' ':' statement ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vnstatement)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnlabeled_statement.default_(
                    r2/* reserved word is omissible */
                    , r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.labeled_statement枝/*137*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.compound_statement枝/*138*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 181: { // [181] compound_statement = '{' '}' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();
                    var left = new Vncompound_statement(r1, null, null, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 182: { // [182] compound_statement = '{' statement_list '}' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();
                    var r1 = (Vnstatement_list)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();
                    var left = new Vncompound_statement(r2, null, r1, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 183: { // [183] compound_statement = '{' declaration_list '}' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();
                    var r1 = (Vndeclaration_list)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();
                    var left = new Vncompound_statement(r2, r1, null, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 184: { // [184] compound_statement = '{' declaration_list statement_list '}' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();
                    var r1 = (Vnstatement_list)context.rightStack.Pop();
                    var r2 = (Vndeclaration_list)context.rightStack.Pop();
                    var r3 = (Token)context.rightStack.Pop();
                    var left = new Vncompound_statement(r3, r2, r1, r0);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.compound_statement枝/*138*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.declaration_list枝/*139*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 185: { // [185] declaration_list = declaration ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vndeclaration)context.rightStack.Pop();
                    var left = new Vndeclaration_list(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 186: { // [186] declaration_list = declaration_list declaration ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vndeclaration)context.rightStack.Pop();
                    var r1 = (Vndeclaration_list)context.rightStack.Pop();
                    var left = r1;
                    left.Add(r0);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.declaration_list枝/*139*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.statement_list枝/*140*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 187: { // [187] statement_list = statement ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vnstatement)context.rightStack.Pop();
                    var left = new Vnstatement_list(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 188: { // [188] statement_list = statement_list statement ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vnstatement)context.rightStack.Pop();
                    var r1 = (Vnstatement_list)context.rightStack.Pop();
                    var left = r1;
                    left.Add(r0);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.statement_list枝/*140*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.expression_statement枝/*141*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 189: { // [189] expression_statement = ';' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    Vnexpression? exp = null;
                    var left = new Vnexpression_statement(
                    exp
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 190: { // [190] expression_statement = expression ';' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Vnexpression)context.rightStack.Pop();
                    var left = new Vnexpression_statement(
                    r1
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.expression_statement枝/*141*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.selection_statement枝/*142*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 191: { // [191] selection_statement = 'if' '(' expression ')' statement ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vnstatement)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnexpression)context.rightStack.Pop();
                    var r3 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r4 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnselection_statement.if_(
                    r4/* reserved word is omissible */
                    , r3/* reserved word is omissible */
                    , r2
                    , r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 192: { // [192] selection_statement = 'if' '(' expression ')' statement 'else' statement ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vnstatement)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnstatement)context.rightStack.Pop();
                    var r3 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r4 = (Vnexpression)context.rightStack.Pop();
                    var r5 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r6 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnselection_statement.ifelse_(
                    r6/* reserved word is omissible */
                    , r5/* reserved word is omissible */
                    , r4
                    , r3/* reserved word is omissible */
                    , r2
                    , r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 193: { // [193] selection_statement = 'switch' '(' expression ')' statement ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vnstatement)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnexpression)context.rightStack.Pop();
                    var r3 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r4 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnselection_statement.switch_(
                    r4/* reserved word is omissible */
                    , r3/* reserved word is omissible */
                    , r2
                    , r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.selection_statement枝/*142*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.iteration_statement枝/*143*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 194: { // [194] iteration_statement = 'while' '(' expression ')' statement ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vnstatement)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnexpression)context.rightStack.Pop();
                    var r3 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r4 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vniteration_statement.while_(
                    r4/* reserved word is omissible */
                    , r3/* reserved word is omissible */
                    , r2
                    , r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 195: { // [195] iteration_statement = 'do' statement 'while' '(' expression ')' ';' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnexpression)context.rightStack.Pop();
                    var r3 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r4 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r5 = (Vnstatement)context.rightStack.Pop();
                    var r6 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vniteration_statement.do_(
                    r6/* reserved word is omissible */
                    , r5
                    , r4/* reserved word is omissible */
                    , r3/* reserved word is omissible */
                    , r2
                    , r1/* reserved word is omissible */
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 196: { // [196] iteration_statement = 'for' '(' expression_statement expression_statement ')' statement ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vnstatement)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnexpression_statement)context.rightStack.Pop();
                    var r3 = (Vnexpression_statement)context.rightStack.Pop();
                    var r4 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r5 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    Vnexpression? exp = null;
                    var left = new Vniteration_statement.for_(
                    r5/* reserved word is omissible */
                    , r4/* reserved word is omissible */
                    , r3
                    , r2
                    , exp
                    , r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 197: { // [197] iteration_statement = 'for' '(' expression_statement expression_statement expression ')' statement ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vnstatement)context.rightStack.Pop();
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r2 = (Vnexpression)context.rightStack.Pop();
                    var r3 = (Vnexpression_statement)context.rightStack.Pop();
                    var r4 = (Vnexpression_statement)context.rightStack.Pop();
                    var r5 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r6 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vniteration_statement.for_(
                    r6/* reserved word is omissible */
                    , r5/* reserved word is omissible */
                    , r4
                    , r3
                    , r2
                    , r1/* reserved word is omissible */
                    , r0
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.iteration_statement枝/*143*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.jump_statement枝/*144*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 198: { // [198] jump_statement = 'goto' 'identifier' ';' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Token)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnjump_statement.goto_(
                    r2/* reserved word is omissible */
                    , r1
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 199: { // [199] jump_statement = 'continue' ';' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnjump_statement.cbr_(
                    r1/* reserved word is omissible */
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 200: { // [200] jump_statement = 'break' ';' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnjump_statement.cbr_(
                    r1/* reserved word is omissible */
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 201: { // [201] jump_statement = 'return' ';' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnjump_statement.cbr_(
                    r1/* reserved word is omissible */
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                case 202: { // [202] jump_statement = 'return' expression ';' ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var r1 = (Vnexpression)context.rightStack.Pop();
                    var r2 = (Token)context.rightStack.Pop();/* reserved word is omissible */
                    var left = new Vnjump_statement.return_(
                    r2/* reserved word is omissible */
                    , r1
                    , r0/* reserved word is omissible */
                    );
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.jump_statement枝/*144*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.translation_unit枝/*145*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 203: { // [203] translation_unit = external_declaration ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 1
                    var r0 = (Vnexternal_declaration)context.rightStack.Pop();
                    var left = new Vntranslation_unit(r0);
                    context.rightStack.Push(left);
                }
                break;
                case 204: { // [204] translation_unit = translation_unit external_declaration ;
                    // dumped by user-defined extractor
                    // dumped by ListExtractor 2
                    var r0 = (Vnexternal_declaration)context.rightStack.Pop();
                    var r1 = (Vntranslation_unit)context.rightStack.Pop();
                    var left = r1;
                    left.Add(r0);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.translation_unit枝/*145*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.external_declaration枝/*146*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 205: { // [205] external_declaration = function_definition ;
                    // dumped by user-defined extractor
                    // dumped by InheritExtractor
                    // class Vnfunction_definition = Vnexternal_declaration
                    var r0 = (Vnfunction_definition)context.rightStack.Pop();
                    var left = r0;
                    context.rightStack.Push(left);
                }
                break;
                case 206: { // [206] external_declaration = declaration ;
                    // dumped by user-defined extractor
                    // dumped by InheritExtractor
                    // class Vndeclaration = Vnexternal_declaration
                    var r0 = (Vndeclaration)context.rightStack.Pop();
                    var left = r0;
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.external_declaration枝/*146*/ - lexiVtCount] = (node, context) => { ... };
            extractorItems[st.function_definition枝/*147*/ - lexiVtCount] = static (node, context) => {
                System.Diagnostics.Debug.Assert(node.regulation != null);
                switch (node.regulation.index) {
                case 207: { // [207] function_definition = declaration_specifiers declarator declaration_list compound_statement ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vncompound_statement)context.rightStack.Pop();
                    var r1 = (Vndeclaration_list)context.rightStack.Pop();
                    var r2 = (Vndeclarator)context.rightStack.Pop();
                    var r3 = (Vndeclaration_specifiers)context.rightStack.Pop();
                    var left = new Vnfunction_definition(r3, r2, r1, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 208: { // [208] function_definition = declaration_specifiers declarator compound_statement ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vncompound_statement)context.rightStack.Pop();
                    var r1 = (Vndeclarator)context.rightStack.Pop();
                    var r2 = (Vndeclaration_specifiers)context.rightStack.Pop();
                    var left = new Vnfunction_definition(r2, r1, null, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 209: { // [209] function_definition = declarator declaration_list compound_statement ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vncompound_statement)context.rightStack.Pop();
                    var r1 = (Vndeclaration_list)context.rightStack.Pop();
                    var r2 = (Vndeclarator)context.rightStack.Pop();
                    var left = new Vnfunction_definition(null, r2, r1, r0);
                    context.rightStack.Push(left);
                }
                break;
                case 210: { // [210] function_definition = declarator compound_statement ;
                    // dumped by user-defined extractor
                    // dumped by DefaultExtractor
                    var r0 = (Vncompound_statement)context.rightStack.Pop();
                    var r1 = (Vndeclarator)context.rightStack.Pop();
                    var left = new Vnfunction_definition(null, r1, null, r0);
                    context.rightStack.Push(left);
                }
                break;
                default: throw new NotImplementedException();
                }
            }; // end of extractorItems[st.function_definition枝/*147*/ - lexiVtCount] = (node, context) => { ... };

        }
    }
}